<?php
App::uses('AppController', 'Controller');

class UsuariosController extends AppController {
	
	var $components = array('Email');
	
	public function beforeFilter(){
		parent::beforeFilter();
		$this->Auth->allow('add', 'ativar', 'perfil');
	}

	// Pagina inicial para login
	public function index() {
		
	}


	public function add() {
		if ($this->request->is('post')) {
			$this->Usuario->create();
			if(isset($this->request->data['Usuario']['senha']))
				$this->request->data['Usuario']['senha_hash'] = $this->geraHash($this->request->data['Usuario']['senha']);
			if(isset($this->request->data['Usuario']['confirmar_senha']))
				$this->request->data['Usuario']['confirmar_senha_hash'] = $this->geraHash($this->request->data['Usuario']['confirmar_senha']);
			$this->request->data['Usuario']['security_hash'] = $this->geraHash($this->request->data['Usuario']['senha_hash'].date("Y-m-d h:i:s").rand()); 
			if ($this->Usuario->save($this->request->data)) {
				$this->emailRegistro($this->request->data);
				$this->Session->setFlash(__('Usuário cadastrado com sucesso! Verifique seu E-mail!'));
				return $this->redirect(array('controller'=>'reviews', 'action' => 'home'));
			} else {
				$this->Session->setFlash(__('Erro ao cadastrar! Verifique os erros e tente novamente'));
			}
		}
	}


	public function edit($id = null) {
		$this->Usuario->id = $id;
		if (!$this->Usuario->exists()) {
			throw new NotFoundException(__('Invalid usuario'));
		}
		if ($this->request->is('post') || $this->request->is('put')) {
			if ($this->Usuario->save($this->request->data)) {
				$this->Session->setFlash(__('The usuario has been saved'));
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('The usuario could not be saved. Please, try again.'));
			}
		} else {
			$this->request->data = $this->Usuario->read(null, $id);
		}
	}


	public function delete($id = null) {
		if (!$this->request->is('post')) {
			throw new MethodNotAllowedException();
		}
		$this->Usuario->id = $id;
		if (!$this->Usuario->exists()) {
			throw new NotFoundException(__('Invalid usuario'));
		}
		if ($this->Usuario->delete()) {
			$this->Session->setFlash(__('Usuario deleted'));
			$this->redirect(array('action' => 'index'));
		}
		$this->Session->setFlash(__('Usuario was not deleted'));
		$this->redirect(array('action' => 'index'));
	}
	
	public function login(){
		if ($this->request->is('post')) {
	        if ($this->Auth->login()) {
	            return $this->redirect($this->Auth->redirect());
	        } else {
	            $this->Session->setFlash(__('Email ou senha incorreta'), 'default', array(), 'auth');
	        }
	    }
	}
	
	public function logout(){
		$this->redirect($this->Auth->logout());
	}
	
	protected function emailRegistro($dados){
		$this->Email->novoEmail();
		$this->Email->assunto(__("email_assunto_registro_site"));
		$this->Email->destinatario($dados['Usuario']['email']);
		$this->Email->helpers('Html');
		$this->Email->template("registro", "default");
		$this->Email->set('nome', $dados['Usuario']['nome']);
		$this->Email->set('email', $dados['Usuario']['email']);
		$this->Email->set('apelido', $dados['Usuario']['apelido']);
		$this->Email->set('hash', $dados['Usuario']['security_hash']);
		$this->Email->mensagem("");
	}
	
	protected function geraHash($senha){
		if(!empty($senha))
			return AuthComponent::password($senha);
		else return null;
	}
	
	public function ativar($hash = null){
		if(empty($hash)){
			throw new NotFoundException(__('Link inválido!'));
		}
		$result = $this->Usuario->ativarConta($hash);
		if($result)
			$this->Session->setFlash(__('Sua conta foi ativada com sucesso!'));
		else
			$this->Session->setFlash(__('Houve um erro na sua ativação! Sua conta já foi ativada?'));
		return $this->redirect('/');
	}
	
	public function meu_perfil(){
		if(!empty($this->request->data)){
			$this->request->data['Usuario']['id'] = $this->usuarioLogado['id'];
			if($this->Usuario->save($this->request->data))
				$this->Session->setFlash(__('Perfil atualizado com sucesso!'));
			else $this->Session->setFlash(__('Erro ao atualizar!'));
		}
	}
	
	public function perfil($id = null, $recursive = 0){
		if(is_null($id))
			throw new NotFoundException('Perfil inválido!');
		$this->Usuario->recursive = $recursive;
		$dados = $this->Usuario->findById($id);
		if(empty($dados))
			throw new NotFoundException('Perfil inválido!');
		else{
			$this->set('dados', $dados);
		}
	}
}
